Mybatis执行sql(insert、update、delete)返回值问题

您所在的位置:网站首页 mybatis 批量更新 返回更新记录数 Mybatis执行sql(insert、update、delete)返回值问题

Mybatis执行sql(insert、update、delete)返回值问题

2024-07-10 23:17| 来源: 网络整理| 查看: 265

数据库:Mysql

在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下。

结论:

insert:   插入n条记录,返回影响行数n。(n>=1,n为0时实际为插入失败)

update:更新n条记录,返回影响行数n。(n>=0)

delete: 删除n条记录,返回影响行数n。(n>=0)

 

验证:

插入多条数据,mysql中可以使用如下sql:

insert into bill (TX_TYP,REMARK,NO) VALUES (?,?,?) , (?,?,?) , (?,?,?) ;

而对oracle的操作略有不同(两种方式 以及对应的mapper配置):

INSERT INTO BILL(NO,TX_TYP,REMARK) (SELECT ?,?,? FROM dual) UNION ALL (SELECT ?,?,? FROM dual); --或者 INSERT ALL INTO bill(NO,TX_TYP,REMARK) values ( ?,?,? ) INTO bill(NO,TX_TYP,REMARK) values ( ?,?,? ) SELECT 1 FROM dual; insert into bill (TX_TYP,REMARK,NO) (SELECT #{bill.txTyp},#{bill.remark},#{bill.no} from dual) insert ALL into bill (TX_TYP,REMARK,NO) values (#{bill.txTyp},#{bill.remark},#{bill.no}) select 1 from dual

为了更直观的查看sql运行情况,在mybatis-config.xml中配置加一个setting配置,将执行的sql打印到控制台。

定义实体类Bill,属性no,txTyp,remark,其中no为mysql数据库表bill自增主键。

Mapper接口

//单条插入 int add(Bill bill); //多条插入 int mulAdd(List list); //更新 int upt(Bill bill); //删除 int del(Bill bill);

Mapper.xml

insert into bill(TX_TYP,REMARK) values(#{txTyp},#{remark}) insert into bill (TX_TYP,REMARK,NO) VALUES (#{bill.txTyp},#{bill.remark},#{bill.no}) update bill set REMARK=#{remark} where NO=#{no} delete from bill where TX_TYP=#{txTyp}

 

开始测试:

①插入单条记录:

@Test public void add(){ Bill bill=new Bill(); bill.setTxTyp("1"); bill.setRemark("试试影响行数"); System.out.println(billMapper.add(bill)); }

sql执行结果与返回值:成功插入一条数据,返回影响行数:1。

②插入多条记录

@Test //测试一次性插入多条记录 public void mulAdd(){ List list =new ArrayList(); Bill bill1=new Bill(); bill1.setTxTyp("1"); bill1.setRemark("bill1"); Bill bill2=new Bill(); bill2.setTxTyp("1"); bill2.setRemark("bill2"); Bill bill3=new Bill(); bill3.setTxTyp("1"); bill3.setRemark("bill3"); list.add(bill1); list.add(bill2); list.add(bill3); System.out.println(billMapper.mulAdd(list)); }

sql执行结果与返回值:成功插入三条数据,返回影响行数:3。

插入多条记录时,如果有记录主键冲突,则sql执行出错,抛出异常,此时未成功插入记录。

③更新语句

@Test //根据no进行更新 public void upt(){ Bill bill=new Bill(); bill.setTxTyp("1"); bill.setRemark("修改一下"); bill.setNo(1); System.out.println(billMapper.upt(bill)); }

sql执行结果与返回值:根据NO字段进行更新,数据库表中没有NO=1的行,返回影响行数:0。修改成表中有的值后,成功返回影响行数。

 

④删除语句

@Test //根据txTyp进行删除 public void del(){ Bill bill=new Bill(); bill.setTxTyp("1"); System.out.println(billMapper.del(bill)); }

sql执行结果与返回值:先将txTyp设置成数据库中没有的值txTyp=a,执行后返回影响行数为0;设置为有4条记录的txTyp=1,执行后返回影响结果为4,成功删除4条记录。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3